import axios from 'axios'

/**
 * 请求拦截器
 * 功能：配置请求头
 */
axios.interceptors.request.use(
  (config) => {
    const token = '222'
    config.headers.authorization = 'Bearer ' + token
    return config
  },
  (error) => {
    console.error('网络错误，请稍后重试')
    return Promise.reject(error)
  },
)

/**
 * 响应拦截器
 * 功能：处理异常
 */
axios.interceptors.response.use(
  (res) => {
    // 状态码：2xx
    if (res.config.responseType === 'json') {
      const { code, data, message } = res.data
      // 请求成功
      if (code === 200) {
        return data
      } else {
        // 抛出错误
        return Promise.reject({ code, data, message })
      }
    } else {
      return res.data
    }
  },
  (err) => {
    // 其他状态码，报错
    return Promise.reject(err)
  },
)

export const $http = axios.create({
  baseURL: import.meta.env.VITE_BASE_URL,
  headers: {
    'X-Requested-With': 'XMLHttpRequest',
  },
  responseType: 'json',
})

export const $httpBlob = axios.create({
  baseURL: import.meta.env.VITE_BASE_URL,
  headers: {
    'X-Requested-With': 'XMLHttpRequest',
    'Cache-Control': 'no-store',
  },
  responseType: 'blob',
})

export const $httpUpload = axios.create({
  baseURL: import.meta.env.VITE_BASE_URL,
  headers: {
    'X-Requested-With': 'XMLHttpRequest',
    'Content-Type': 'multipart/form-data',
  },
  responseType: 'json',
})
